<?php namespace Common\Model;
use Hdphp\Model\Model;
//分类表模型
class Cate extends Model{
	//指定模型操作的表
	protected $table = 'category';
//	$validate是自动验证要通过create方法来触发
	protected $validate = array(
//		1,字段名
//		2,规则required必填
//		3,提示的信息
//		4,验证的条件
//		5,验证的时机
		array('cname','required','分类不能为空',3,3),
		array('cname','maxlen:20','分类名称不得超过20个字符',3,3),
		array('ctitle','required','分类标题不能为空',3,3),
		
	);
	//定义一个自定义添加方法
	public function store(){
		//模型自带	方法，可以让$this->data有值
		if($this->create()){
		//模型自带方法，add添加的时候需要从$this->data获得值
		//先create执行再add添加
//		添加方法会返回主键自增id
		$this->add();
//		返回真
		return TRUE;
		}
//		否则返回假
		return FALSE;
	}
//	定义一个编辑的方法
	public function edit(){
//		判断如果执行当前的create创建的方法,找不到的话往父级去寻找
	    if($this->create()){
	    	//save代替了update修改(不用写where条件的原因是因为edit.php页面有一个隐藏域)
			$this->save();
//			返回真
			return TRUE;
	    }
//		否则返回假
		return FALSE;
	}
	
//	获得所有的分类,但是排除自己和自己的子集
	public function getNoMy($cid){
//	1,获得自己和自己的子集的cid
//	获得自己的cid
	$data = $this->get();
//	获得子集的cid
	$cids = $this->getSon($data,$cid);
//	压入自己
	$cids[] = $cid;
//	2,排除
	$result = $this->where("cid NOT IN(" . implode('.', $cids) . ")")->get();
//	Data::tree显示树状父子级关系
	$result = Data::tree($result,'cname');
	return $result;
	}
//	获得所有子集的cid
	public function getSon($data,$cid){
//		定义一个空数组
	    $temp = array();
		foreach ($data as $v){
//			如果找到自己的子集
			if($v['pid'] == $cid){
//				把子集cid压入到数组
				$temp[] = $v['cid'];
//				再次传入,再次寻找子集
				$temp = array_merge($temp,$this->getSon($data, $v['cid']));
			}
		}
		return $temp;
	}
	
	public function del($cid){
		$arcModel = new \Common\Model\Arc;
		$arcData = $arcModel->where("category_cid={$cid}")->find();
		if($arcData){
			$this->error = '请先删除该分类下面的文章';
			return FALSE;
		}
		//2.删除之后上移一级
//		cid    cname    pid
//		 12     娱乐       0
//		 15    小娱乐      12(要删除的数据)
//		 17   小小娱乐    15（要上移的数据）
//		 18   小小娱乐2    15（要上移的数据）
		//(1)获得要删除分类的pid
		//pluck 拿指定的字段
		$pid = $this->where("cid={$cid}")->pluck('pid');
		//(2)找到要删除分类的所有的子类,然后改变pid
		$this->where("pid={$cid}")->save(array('pid'=>$pid));
		//(3)最后删除当前的分类
		$this->where(array('cid'=>$cid))->delete();
	    return true;
	}
	
	
	
}





 ?>